/*
 *                         .0llo.
 *                         .O..,d:
 *                          dc  .:x'
 *                         .k:;. ..xc.
 *                       .cx:'';. ',lol:'
 *                     .lx:''''',  .;''::o'
 *                    ;o:''''''',. .;;'', co.
 *                   cc  .,'''''',  .,'';. ;k.
 *                  ,O.   .,''''';. .,''''  ;x.
 *                 'k;,    .''''''; .;,'',  .cO.
 *                .x:'';    '''''':. ':'''  .:cxc
 *                o; ',',.   .,''';. .:,;.   . .l:
 *               cc.  ...'.    .'''  .;        .:l
 *              ld ..                 ;   ..'',cx;
 *               dc...   .......      '  ,'....cO
 *                ol:;. :......',''   . ,,.....0:
 *                 lol:.,;........':  ..,'...;:O.
 *                  ;ol.. .',....,,,   . .... lc
 *                    ,l;    .....     .     'x
 *                      ;k:            .     O,
 *                    .cc::l.    .. .. .';. lOdlcc.
 *                   co.  .dd:c  .''.' .c,,dk:   .d;
 *                 'xx':oc:,''kd:''.....,lOko.     d'
 *               .d0koxx. ...oOOkkkxxlolxkd:;:;;;:cxko,
 *              '0kx..l.  . .lo0kdxo;;dxkdc.     ..,okOx;
 *              lOl   ::''cckOO0kdoldxkxxo,.  .:.  ,dl;'cx
 *              'K;   .:xd:c0:dxxxddxxxl;.   'kOKx''    'k
 *               .:::::,.  .0c ,dxxxl,     'o0d,,::,,:. o,
 *                         .Ox:  co.    ':dxd0k,...  .oc:
 *                        .k,.:o'  .,:oxxxxc.lo::;::',,
 *                      'oO,   ,xdlxxxxxx:.  .O
 *                     l0kk'    lxxxxxxx'    .0l
 *                   .kOxxxd,   ,OOOkkk;    .dx0.
 *                  .Okxxxoclo':l,..':O.  ;oxxxOx
 *                  dcxl'    ;k.      'x:dooxxl.l:
 *                 ;d .      lc        .0.  .::  d.
 *               .co;..     .k.         lc       'd
 *              .O.   .. ...lx           x'  .,,. ,o.
 *              .dd:,;clol::,.           ,k. .     .O.
 *                 ',..                   ,l:      ;k.
 *                                          .;:c:;;,
 *
 *                                                      .   .  ....
 *
 */